/**
 ******************************************************************************
 * @file           : bsp_oled_config.h
 * @brief          : OLED Configuration File
 ******************************************************************************
 * @attention
 *
 * OLED显示屏配置文件
 * 支持SSD1306芯片（128x64）
 * 用户根据实际硬件修改此文件
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_OLED_CONFIG_H
#define __BSP_OLED_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/

/* ============================================================================ */
/*                        硬件配置（改这里）                                      */
/* ============================================================================ */

/**
 * OLED通信接口选择
 * 选项：1=I2C接口, 0=SPI接口
 */
#define OLED_USE_I2C            1

/**
 * 是否使用BSP层驱动
 * 选项：1=使用BSP层IIC/SPI驱动, 0=直接使用HAL库
 */
#define OLED_USE_BSP_DRIVER     0

#if (OLED_USE_I2C == 1)
    /* I2C配置 */
    #if (OLED_USE_BSP_DRIVER == 1)
        #include "./BSP/IIC_GPIO/bsp_iic_gpio.h"
    #else
        extern I2C_HandleTypeDef hi2c1;
        #define OLED_I2C_HANDLE     &hi2c1
    #endif
    
    #define OLED_I2C_ADDR       0x78    /* OLED I2C地址（7位地址<<1） */
    
#else
    /* SPI配置 */
    #if (OLED_USE_BSP_DRIVER == 1)
        #include "./BSP/SPI/bsp_spi.h"
    #else
        extern SPI_HandleTypeDef hspi1;
        #define OLED_SPI_HANDLE     &hspi1
    #endif
    
    /* SPI控制引脚 */
    #define OLED_DC_GPIO_PORT   GPIOB
    #define OLED_DC_GPIO_PIN    GPIO_PIN_0
    #define OLED_CS_GPIO_PORT   GPIOB
    #define OLED_CS_GPIO_PIN    GPIO_PIN_1
    #define OLED_RST_GPIO_PORT  GPIOB
    #define OLED_RST_GPIO_PIN   GPIO_PIN_2
#endif

/**
 * OLED显示参数
 */
#define OLED_WIDTH              128     /* 宽度（像素） */
#define OLED_HEIGHT             64      /* 高度（像素） */
#define OLED_PAGES              8       /* 页数（64/8） */

/* ============================================================================ */
/*                       日志系统配置（改这里的数字）                             */
/* ============================================================================ */
/* 日志后端选择：1=EasyLogger, 2=printf, 0=关闭 */
#define OLED_USE_LOG            1

/* 根据配置自动定义日志宏 */
#if (OLED_USE_LOG == 1)
    /* 使用EasyLogger */
    #ifndef LOG_TAG
        #define LOG_TAG    "OLED"
    #endif
    #include "elog.h"
    
#elif (OLED_USE_LOG == 2)
    /* 使用printf */
    #include <stdio.h>
    #define log_i(fmt, ...)     printf(fmt "\r\n", ##__VA_ARGS__)
    #define log_w(fmt, ...)     printf("[WARN] " fmt "\r\n", ##__VA_ARGS__)
    #define log_e(fmt, ...)     printf("[ERROR] " fmt "\r\n", ##__VA_ARGS__)
    #define log_d(fmt, ...)     printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__)
    
#else
    /* 关闭日志 */
    #define log_i(fmt, ...)
    #define log_w(fmt, ...)
    #define log_e(fmt, ...)
    #define log_d(fmt, ...)
#endif

/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

#ifdef __cplusplus
}
#endif

#endif /* __BSP_OLED_CONFIG_H */
